package com.hmall.gateway.config;

import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.rsa.crypto.KeyStoreKeyFactory;

import java.security.KeyPair;

/**
 * - AuthProperties：配置登录校验需要拦截的路径，因为不是所有的路径都需要登录才能访问
 * - JwtProperties：定义与JWT工具有关的属性，比如秘钥文件位置
 * - SecurityConfig：工具的自动装配
 * - JwtTool：JWT工具，其中包含了校验和解析token的功能
 * - hmall.jks：秘钥文件
 */

@Configuration
@EnableConfigurationProperties(JwtProperties.class)
// 用于启用 @ConfigurationProperties 注解标注的类，并将其注册为 Spring 容器中的一个 Bean
public class SecurityConfig {

    @Bean
    public PasswordEncoder passwordEncoder(){
        return new BCryptPasswordEncoder();
    }

    @Bean
    public KeyPair keyPair(JwtProperties properties){
        // 获取秘钥工厂
        KeyStoreKeyFactory keyStoreKeyFactory =
                new KeyStoreKeyFactory(
                        properties.getLocation(),
                        properties.getPassword().toCharArray());
        //读取钥匙对
        return keyStoreKeyFactory.getKeyPair(
                properties.getAlias(),
                properties.getPassword().toCharArray());
    }
}